package Logica;

public class Ganador {

	private int[][] jugadasEvaluar;
	private int tamanio;
	@SuppressWarnings("unused")
	private int jugador;
	private int max1;
	private int max2;
	
	public boolean hayGanador(int[][] jugadas, int tamanio, int jugador) {
		this.tamanio = tamanio;
		this.jugador = jugador;
		llenaMatriz(jugadas);
		if (jugador == 1 || jugador == 3) {
			if (evaluar1(jugador))
				return true;
		}
		if (jugador == 2) {
			if (evaluar2(jugador))
				return true;
		}
		return false;

	}

	public void llenaMatriz(int[][] jugadas) {
		jugadasEvaluar = new int[tamanio + 2][tamanio + 2];
		for (int i = 1; i <= tamanio; i++) {
			for (int j = 1; j <= tamanio; j++) {
				jugadasEvaluar[i][j] = jugadas[i - 1][j - 1];
			}
		}
//		imprimirMatriz();
	}

//	public void imprimirMatriz() {
//		
//		for (int i = 0; i < tamanio + 2; i++) {
//			for (int j = 0; j < tamanio + 2; j++) {
//				System.out.print(jugadasEvaluar[i][j] + " ");
//			}
//			System.out.println();
//		}
//		
//	}

	public boolean evaluar1(int jugador) {
		
		for (int i = 1; i <= tamanio; i++) {
			max1 = 0;
			linea(jugadasEvaluar, 1, i, jugador);
			if (max1 == tamanio) {
				return true;
			}
		}
		return false;
	}
	public boolean evaluar2(int jugador) {
		for (int i = 1; i <= tamanio; i++) {
			max2 = 0;
			linea(jugadasEvaluar, i, 1, jugador);
			if (max2 == tamanio) {
				return true;
			}
		}
		return false;
	}


	public int linea(int[][] jugadas, int i, int j, int jugador) {
		if (jugadas[i][j] != jugador)
			return 0;
		jugadas[i][j] = -1;
		max1 = Math.max(max1, i);
		max2 = Math.max(max2, j);
		return 1 + /*linea(jugadas, i - 1, j-1, jugador)*/
				+ (linea(jugadas, i - 1, j, jugador)
				+ linea(jugadas, i - 1, j + 1, jugador)
				+ linea(jugadas, i, j - 1, jugador)
				+ linea(jugadas, i, j + 1, jugador)
				+ linea(jugadas, i + 1, j - 1, jugador) + 
				linea(jugadas, i + 1,	j, jugador));
	}

}
